home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / binutils.7 / binutils / binutils-2.7 / ld / genscripts.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1996-07-04  |  4.3 KB  |  134 lines

  1. #!/bin/sh
  2. # genscripts.sh - generate the ld-emulation-target specific files
  3. #
  4. # Usage: genscripts.sh srcdir libdir host target target_alias \
  5. # default_emulation native_lib_dirs this_emulation tool_dir
  6. #
  7. # Sample usage:
  8. # genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib sparc-sun-sunos4.1.3 \
  9. # sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 "" sun3 sparc-sun-sunos4.1.3
  10. # produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c
  11.  
  12. srcdir=$1
  13. libdir=$2
  14. host=$3
  15. target=$4
  16. target_alias=$5
  17. DEFAULT_EMULATION=$6
  18. NATIVE_LIB_DIRS=$7
  19. EMULATION_NAME=$8
  20. tool_lib=`echo ${libdir} | sed -e 's|/lib$||'`/${9-$target_alias}/lib
  21.  
  22. # Include the emulation-specific parameters:
  23. . ${srcdir}/emulparams/${EMULATION_NAME}.sh
  24.  
  25. if test -d ldscripts; then
  26.   true
  27. else
  28.   mkdir ldscripts
  29. fi
  30.  
  31. # Set the library search path, for libraries named by -lfoo.
  32. # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
  33. # Otherwise, the default is set here.
  34. #
  35. # The format is the usual list of colon-separated directories.
  36. # To force a logically empty LIB_PATH, do LIBPATH=":".
  37.  
  38. if [ "x${LIB_PATH}" = "x" ] ; then
  39.   if [ "x${host}" = "x${target}" ] ; then
  40.     if [ "x${DEFAULT_EMULATION}" = "x${EMULATION_NAME}" ] ; then
  41.       # Native.
  42.       LIB_PATH=/lib:/usr/lib
  43.       if [ -n "${NATIVE_LIB_DIRS}" ]; then
  44.     LIB_PATH=${LIB_PATH}:${NATIVE_LIB_DIRS}
  45.       fi
  46.       if [ "${libdir}" != /usr/lib ]; then
  47.     LIB_PATH=${LIB_PATH}:${libdir}
  48.       fi
  49.       if [ "${libdir}" != /usr/local/lib ] ; then
  50.     LIB_PATH=${LIB_PATH}:/usr/local/lib
  51.       fi
  52.     else
  53.       # Native, but not default emulation.
  54.       LIB_PATH=
  55.     fi
  56.   else
  57.     # Cross.
  58.     LIB_PATH=
  59.   fi
  60. fi
  61.  
  62. # Always search $(tooldir)/lib, aka /usr/local/TARGET/lib.
  63. LIB_PATH=${LIB_PATH}:${tool_lib}
  64.  
  65. LIB_SEARCH_DIRS=`echo ${LIB_PATH} | tr ':' ' ' | sed -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'`
  66.  
  67. # Generate 5 or 6 script files from a master script template in
  68. # ${srcdir}/scripttempl/${SCRIPT_NAME}.sh.  Which one of the 5 or 6
  69. # script files is actually used depends on command line options given
  70. # to ld.  (SCRIPT_NAME was set in the emulparams_file.)
  71. #
  72. # A .x script file is the default script.
  73. # A .xr script is for linking without relocation (-r flag).
  74. # A .xu script is like .xr, but *do* create constructors (-Ur flag).
  75. # A .xn script is for linking with -n flag (mix text and data on same page).
  76. # A .xbn script is for linking with -N flag (mix text and data on same page).
  77. # A .xs script is for generating a shared library with the --shared
  78. #   flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
  79. #   emulation parameters.
  80.  
  81. SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}}
  82.  
  83. # Determine DATA_ALIGNMENT for the 5 variants, using
  84. # values specified in the emulparams/<emulation>.sh file or default.
  85.  
  86. DATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}"
  87. DATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}"
  88. DATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}"
  89. DATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}"
  90. DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
  91.  
  92. LD_FLAG=r
  93. DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
  94. DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
  95. (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  96.   ldscripts/${EMULATION_NAME}.xr
  97.  
  98. LD_FLAG=u
  99. DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
  100. CONSTRUCTING=" "
  101. (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  102.   ldscripts/${EMULATION_NAME}.xu
  103.  
  104. LD_FLAG=
  105. DATA_ALIGNMENT=${DATA_ALIGNMENT_}
  106. RELOCATING=" "
  107. (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  108.   ldscripts/${EMULATION_NAME}.x
  109.  
  110. LD_FLAG=n
  111. DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
  112. TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}}
  113. (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  114.   ldscripts/${EMULATION_NAME}.xn
  115.  
  116. LD_FLAG=N
  117. DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
  118. (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  119.   ldscripts/${EMULATION_NAME}.xbn
  120.  
  121. if test -n "$GENERATE_SHLIB_SCRIPT"; then
  122.   LD_FLAG=shared
  123.   DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
  124.   CREATE_SHLIB=" "
  125.   # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
  126.   (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
  127.     ldscripts/${EMULATION_NAME}.xs
  128. fi
  129.  
  130. test "$DEFAULT_EMULATION" = "$EMULATION_NAME" && COMPILE_IN=true
  131.  
  132. # Generate em_${EMULATION_NAME}.c.
  133. . ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
  134.